package test;

import entity.Course;
import entity.Student;
import entity.Teacher;

// 测试类：验证继承关系和业务逻辑（教师开课、学生选课/退课、打印课表）
public class TestMain {
    public static void main(String[] args) {
        // 1. 创建2门课程对象
        Course math = new Course("C001", "高等数学", "第一教学楼302", "周一上午9:00-11:00");
        Course english = new Course("C002", "大学英语", "第二教学楼101", "周三下午2:00-4:00");

        // 2. 创建教师对象并开设课程
        Teacher liTeacher = new Teacher("T001", "李老师", "男");
        liTeacher.setTaughtCourse(math); // 李老师开设高等数学

        Teacher wangTeacher = new Teacher("T002", "王老师", "女");
        wangTeacher.setTaughtCourse(english); // 王老师开设大学英语

        // 3. 创建学生对象并模拟选课、退课
        Student zhangStudent = new Student("S001", "张三", "男");
        zhangStudent.selectCourse(math); // 张三选高等数学
        zhangStudent.dropCourse();       // 张三退高等数学
        zhangStudent.selectCourse(english); // 张三重新选大学英语

        Student liStudent = new Student("S002", "李四", "女");
        liStudent.selectCourse(math); // 李四选高等数学

        // 4. 调用重写的printInfo()方法，打印教师授课信息和学生课表
        liTeacher.printInfo();    // 打印李老师信息
        wangTeacher.printInfo();  // 打印王老师信息
        zhangStudent.printInfo(); // 打印张三课表
        liStudent.printInfo();    // 打印李四课表

        // 5. 验证权限控制：父类protected属性子类可通过Getter访问
        System.out.println("===== 权限控制验证 =====");
        System.out.println("李老师（父类属性）：编号=" + liTeacher.getId() + "，姓名=" + liTeacher.getName());
        System.out.println("张三（父类属性）：编号=" + zhangStudent.getId() + "，姓名=" + zhangStudent.getName());
    }
}